package com.muyan.common.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * 数字格式化的类
 *
 * @author muyan
 * @since 2016年11月30日 下午5:58:40
 */
public class NumUtil {

    /**
     * 四舍五入，保留指定位数的小数，返回Number
     * @author muyan
     * @param value 待处理数值
     * @param n 保留n位小数
     * @return String
     */
    public static Double pointRound(Double value, int n) {
        if (value == null) return 0D;
        return new BigDecimal(value).setScale(n, RoundingMode.HALF_UP).doubleValue();
    }

    /**
     * float小数点四舍五入
     */
    public static Float pointRound(Float value, int n) {
        if (value == null) return 0F;
        return new BigDecimal(value).setScale(n, RoundingMode.HALF_UP).floatValue();
    }

    /**
     * 保留指定位数的小数(少的位数不补零)
     * 四舍五入
     *
     * @author muyan
     * @param value 待处理数值
     * @param n 保留n位小数
     * @return String
     */
    public static String keepPoint(Double value, int n) {
        return pointRound(value, n).toString();
    }

    /**
     * 浮点保留两位小数(少的位数不补零)
     *
     * @author muyan
     */
    public static String keep2Point(double value) {
        return keepPoint(value, 2);
    }

    /**
     * 浮点保留1位小数(少的位数不补零)
     *
     * @author muyan
     */
    public static String keep1Point(double value) {
        return keepPoint(value, 1);
    }

    /**
     * 浮点保留任意位小数(少位补零)
     *
     * @author muyan
     */
    public static String keepPointZero(double value, int n) {
        DecimalFormat df = new DecimalFormat("#0.00");
        return df.format(Double.valueOf(keepPoint(value, n)));
    }

    /**
     * 浮点保留两位小数(少位补零)
     *
     * @author muyan
     */
    public static String keep2PointZero(double value) {
        return keepPointZero(value, 2);
    }

    /**
     * 获取任意小数点位的百分比表示
     *
     * @author muyan
     */
    public static String percentPoint(double value, int n) {
        NumberFormat percent = NumberFormat.getPercentInstance();
        percent.setGroupingUsed(false);
        percent.setMaximumFractionDigits(n);
        return percent.format(value);
    }

    /**
     * 百分比保留两位小数
     *
     * @author muyan
     */
    public static String percent2Point(double value) {
        return percentPoint(value, 2);
    }

    /**
     * 获取格式化经纬度后的小数(保留3位)
     *
     * @author muyan
     */
    public static String latLngPoint(double value) {
        return keepPoint(value, 3);
    }

}
